import UIKit

/*
    写一个函数，输入 n ，求斐波那契（Fibonacci）数列的第 n 项（即 F(N)）。斐波那契数列的定义如下：

    F(0) = 0,   F(1) = 1
    F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
    斐波那契数列由 0 和 1 开始，之后的斐波那契数就是由之前的两数相加而得出。

    答案需要取模 1e9+7（1000000007），如计算初始结果为：1000000008，请返回 1。

    来源：力扣（LeetCode）
    链接：https://leetcode-cn.com/problems/fei-bo-na-qi-shu-lie-lcof
    著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
*/

class Solution {
    func fib(_ n: Int) -> Int {
        if n == 0{
            return 0
        }
        if n == 1 {
            return 1
        }
        return fib(n-1)+fib(n-2)
    }
    
    //   F(0) = 0, F(1) = 1 F(2) = 1 F(3) = 2
    //   F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
    func optimizeFib(_ n: Int) -> Int {
        var f1=0,f2=1,sum=0
        for _ in 0..<n{
            sum = ((f2+f1)%1000000007)
            f1 = f2
            f2 = sum
        }
        return f1
    }
}

class Animal {
    
}

let an = Animal()
let ans = type(of: an)
let anss = an.self
let ansss = Animal.self
let asnsss: Animal.Type = Animal.self
print(an)

var vv:Int! = Int("33") // 这个可选类型的vv系统会帮你自动解包

let vac = vv + 2
print(vac)

/*
 f(3) = f(2)+f(1) = 1  //f2 = 1
 f(4) = f(3)+f(2) = 3  = //f3=1 f2=1 f1=
 f(5) = f(4)+f(3) = 5+3 = 4
 */

let sum = Solution().optimizeFib(45)
print("sum :\(sum)")


for item in 0...5{
    print(item)
}
 
